<!DOCTYPE html>
<html lang="zh-cn">
<head>

    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

  	<meta property="og:title" content=" 微信二维码签到的另一种玩法 &middot;  FNL" />
  	<meta property="og:site_name" content="FNL" />
  	<meta property="og:url" content="http://blog.im404.me/post/wechat-sign-in/" />

    
  	<meta property="og:type" content="article" />

    <meta property="og:article:published_time" content="2016-10-07T03:15:21&#43;08:00" />

    
    

  <title>
     微信二维码签到的另一种玩法 &middot;  FNL
  </title>

    <meta name="description" content="Fun things first?" />

    <meta name="HandheldFriendly" content="True" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <link rel="shortcut icon" href="http://blog.im404.me/images/favicon.ico">
	  <link rel="apple-touch-icon" href="http://blog.im404.me/images/apple-touch-icon.png" />

    <link rel="stylesheet" type="text/css" href="http://blog.im404.me/css/screen.css" />
    <link rel="stylesheet" type="text/css" href="http://blog.im404.me/css/nav.css" />
    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic|Open+Sans:700,400|Inconsolata" />


    
      
          <link href="http://blog.im404.me/index.xml" rel="alternate" type="application/rss+xml" title="FNL" />
      
      
    
    <meta name="generator" content="Hugo 0.18.1" />

    <link rel="canonical" href="http://blog.im404.me/post/wechat-sign-in/" />

    

    
</head>
<body class="nav-closed">

  <div class="nav">
    <h3 class="nav-title">Menu</h3>
    <a href="#" class="nav-close">
        <span class="hidden">Close</span>
    </a>
    <ul>
        
        
        
            
            <li class="nav-opened" role="presentation">
            	<a href="http://blog.im404.me/">文章</a>
            </li>
        
            
            <li class="nav-opened" role="presentation">
            	<a href="http://blog.im404.me/about/">关于</a>
            </li>
        
    </ul>
    
    
    <a class="subscribe-button icon-feed" href="http://blog.im404.me/index.xml">Subscribe</a>
    
</div>
<span class="nav-cover"></span>


 <div class="site-wrapper">




<header class="main-header post-head no-cover">
  <nav class="main-nav clearfix">


  
      <a class="blog-logo" href="http://blog.im404.me/"><img src="http://blog.im404.me/images/logo.ico" alt="Home" /></a>
  
  
      <a class="menu-button" href="#"><span class="burger">&#9776;</span><span class="word">Menu</span></a>
  
  </nav>
</header>



<main class="content" role="main">




  <article class="post post">

    <header class="post-header">
        <h1 class="post-title">微信二维码签到的另一种玩法</h1>
        <small></small>

        <section class="post-meta">
        
          <time class="post-date" datetime="2016-10-07T03:15:21&#43;08:00">
            Oct 7, 2016
          </time>
        
         
        </section>
    </header>

    <section class="post-content">
      <p>前一段时间做的项目涉及到了微信二维码签到，但是网上搜索到的解决办法都有所不足,因此在这里写一下自己的思路。</p>

<h2 id="普遍的解决办法">普遍的解决办法</h2>

<p>一般来说，微信二维码签到可以分为两类，一类是”签到者扫码“，也就是需要签到的人员扫描主办方的二维码；另一类是”主办方扫码“，即举办活动的那一方在现场扫描签到者的二维码。</p>

<ol>
<li><p>使用微信公众号自带的”生成二维码“（签到者扫码）
这里生成的二维码是通过微信公众号后台生成的”事件二维码“，用户在微信里面”扫一扫“之后就会触发生成二维码时设置好的事件。</p>

<ul>
<li>优点
不用设置”扫码机“
成本较低，仅须生成一次二维码</li>
<li>缺点
签到者可以将二维码拍下来发送给另一位签到者，因此无法做到确认扫码者是否在场。（作弊签到）
<br /></li>
</ul></li>

<li><p>在签到现场定时刷新签到二维码（签到者扫码）
使用二维码的库来自行生成二维码，并为了防止现场拍下二维码设置了二维码的有效时间,二维码的有效时间一过即自动刷新。</p>

<ul>
<li>优点
不用设置”扫码机“
防止了将二维码拍下的”作弊签到“</li>
<li>缺点
需要生成多次二维码
现场需要刷新二维码，即需要在签到现场架设电脑及网络
在二维码的有效时间内，仍能将二维码拍下后传递扫描</li>
</ul></li>

<li><p>在签到之前对每个用户生成二维码，在现场架设扫码机器进行扫码（主办方扫码）
在签到之前就对每个需要签到的用户生成了二维码，主办方在现场扫描用户的二维码。</p>

<ul>
<li>优点
能够确认扫码者都到了现场。</li>
<li>缺点
扫码机属于硬件设施，需要配套电脑使用，即在现场需要架设电脑。
<br /></li>
</ul></li>
</ol>

<p>以上三种办法中，签到者扫码的解决办法始终无法保证签到者是否真正到了现场。而主办方扫码则可以在扫码机读取到二维码后工作人员根据二维码调取签到者的个人信息现场进行确认，能有效的防止”作弊签到“，缺点就是价格贵了点。</p>

<h2 id="用微信-扫一扫-代替扫码机">用微信”扫一扫“代替扫码机</h2>

<p>在研究微信公众号开发文档几天后，我给出了这样的一个解决方法。
微信有一个OpenAuth2.0的授权机制，能够获取到用户的openid，每个用户获取到的openid都是不一样的，而这里就是突破口。</p>

<pre><code>1. 在签到开始之前，将需要扫码的”签到扫码员“的openid先记录下来（这里我用也用了二维码）。
2. 每个签到者都会由自己的二维码。
3. 由于当微信的”扫一扫“识别到二维码中的数据是一个url时会跳转，那么每个签到者的二维码都是一个url。
4. 签到者拿到的url中，页面会根据扫码者的openid来判断扫码者是否为”签到扫码员“，只有是扫码者是“签到扫码员”时，才会将签到者记为已签到。
</code></pre>

<p>这种方法免去了扫码机的费用，现场只需几台授权后的手机即可。</p>
    </section>


  <footer class="post-footer">


    
    <figure class="author-image">
        <a class="img" href="http://blog.im404.me/" style="background-image: url(http://blog.im404.me/images/logo.ico)"><span class="hidden">fjmax's Picture</span></a>
    </figure>
    

    





<section class="author">
  <h4><a href="http://blog.im404.me/">fjmax</a></h4>
  
  <p>programmer and dreamer</p>
  
  <div class="author-meta">
    
    <span class="author-link icon-link"><a href="http://blog.im404.me">http://blog.im404.me</a></span>
  </div>
</section>



    
<section class="share">
  <h4>Share this post</h4>
  <a class="icon-twitter" style="font-size: 1.4em" href="https://twitter.com/share?text=%e5%be%ae%e4%bf%a1%e4%ba%8c%e7%bb%b4%e7%a0%81%e7%ad%be%e5%88%b0%e7%9a%84%e5%8f%a6%e4%b8%80%e7%a7%8d%e7%8e%a9%e6%b3%95&nbsp;-&nbsp;FNL&amp;url=http%3a%2f%2fblog.im404.me%2fpost%2fwechat-sign-in%2f"
      onclick="window.open(this.href, 'twitter-share', 'width=550,height=235');return false;">
      <span class="hidden">Twitter</span>
  </a>
  <a class="icon-facebook" style="font-size: 1.4em" href="https://www.facebook.com/sharer/sharer.php?u=http%3a%2f%2fblog.im404.me%2fpost%2fwechat-sign-in%2f"
      onclick="window.open(this.href, 'facebook-share','width=580,height=296');return false;">
      <span class="hidden">Facebook</span>
  </a>
  <a class="icon-pinterest" style="font-size: 1.4em" href="http://pinterest.com/pin/create/button/?url=http%3a%2f%2fblog.im404.me%2fpost%2fwechat-sign-in%2f&amp;description=%e5%be%ae%e4%bf%a1%e4%ba%8c%e7%bb%b4%e7%a0%81%e7%ad%be%e5%88%b0%e7%9a%84%e5%8f%a6%e4%b8%80%e7%a7%8d%e7%8e%a9%e6%b3%95"
      onclick="window.open(this.href, 'pinterest-share','width=580,height=296');return false;">
      <span class="hidden">Pinterest</span>
  </a>
  <a class="icon-google-plus" style="font-size: 1.4em" href="https://plus.google.com/share?url=http%3a%2f%2fblog.im404.me%2fpost%2fwechat-sign-in%2f"
     onclick="window.open(this.href, 'google-plus-share', 'width=490,height=530');return false;">
      <span class="hidden">Google+</span>
  </a>
</section>



    

<div id="disqus_thread"></div>
<script type="text/javascript">
  var disqus_shortname = 'fjmax';
  var disqus_url = 'http:\/\/blog.im404.me\/post\/wechat-sign-in\/';
  (function() {
    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>




  </footer>
</article>

</main>
    <footer class="site-footer clearfix">
        <section class="copyright"><a href="">FNL</a> All rights reserved - 2016</section>
        
        <section class="poweredby">Proudly generated by <a class="icon-hugo" href="http://gohugo.io">HUGO</a>, with <a class="icon-theme" href="https://github.com/vjeantet/hugo-theme-casper">Casper</a> theme</section>
        
    </footer>
    </div>
    <script type="text/javascript" src="http://blog.im404.me/js/jquery.js"></script>
    <script type="text/javascript" src="http://blog.im404.me/js/jquery.fitvids.js"></script>
    <script type="text/javascript" src="http://blog.im404.me/js/index.js"></script>
    
</body>
</html>

